# -*- encoding: utf-8 -*-
"""

PyCharm 通过使用ordereddict来创建fifo的dict
2024年10月25日13时29分
by wenyang

文件主要内容:


"""
from collections import OrderedDict

class LastUpdatedOrderedDict(OrderedDict):

    def __init__(self, capacity):
        super(LastUpdatedOrderedDict, self).__init__()
        # 设置字典的最大的容量
        self._capacity = capacity

    # 重写__setitem__方法
    def __setitem__(self, key, value):
        # 判断key是否存在 如果存在则返回1 否则返回0
        containsKey = 1 if key in self else 0
        # 判断字典的长度是否大于最大的容量
        if len(self) - containsKey >= self._capacity:
            # 如果大于最大的容量就是会删除字典的第一个元素 这是因为字典第一个值位与第一个元素 所以删除第一个元素就是删除字典的第一个元素
            last = self.popitem(last = False)
            print("remove", last)
        # 如果key存在就是会删除字典的原来的值 然后添加新的值
        if containsKey:
            del self[key]
            print("set", (key, value))
        else:
            print("add", (key, value))

        OrderedDict.__setitem__(self, key, value)


def main():
    fifo_dict = LastUpdatedOrderedDict(2)
    fifo_dict["one"] = 1
    fifo_dict["two"] = 2
    fifo_dict["three"] = 3
    fifo_dict["four"] = 4
    fifo_dict["five"] = 5
    print(fifo_dict)



if __name__ == "__main__":
    main()
